<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <child1></child1>
        <child2></child2>
    </div>
    <script src="./js/vue.js"></script>
    <script>
        let child1 = {
            data() {
                return {
                    msg: '李狗蛋儿'
                }
            },
            template: `
                <div>
                    德玛西亚
                    <button @click="sendData">点我点我</button>
                </div>
            `,
            methods: {
                sendData() {
                    this.$bus.$emit('getdata', this.msg)
                }
            }
        }
        // 总结 所谓非父子组件传值 就是没有父子关系的两个组件之间进行数据通信
        // bus其实本质是一个vue的实例化对象
        // vue实例对象中包含 $on 和 $emit
        // $on 可以监听一个事件的触发
        // $emit 可以触发一个事件 并且通过第二个参数传递数据
        // $on的回调函数可以接收数据
        let child2 = {
            template: `
                <div>永世长存</div>
            `,
            created() {
                console.log(this);
                this.$bus.$on('getdata', (data) => {
                    console.log(data);
                })
            }
        }
        let bus = new Vue() // bus就是一个拥有$emit方法和$on方法的对象
        Vue.prototype.$bus = bus
        new Vue({
            el: '#app',
            components: {
                child1,
                child2
            }
        })
    </script>
</body>
</html>